मैं सीयूडीए को मौजूदा एकल थ्रेडेड सी प्रोग्राम में जोड़ने की कोशिश कर रहा हूं जो 90 के उत्तरार्ध में कभी-कभी लिखा गया था।जीसीसी और एनवीसीसी (जी ++) दो अलग-अलग संरचना आकार क्यों देखते हैं?
ऐसा करने के लिए मुझे दो भाषाओं, सी और सी ++ (एनवीसीसी एक सी ++ कंपाइलर) मिश्रण करने की आवश्यकता है।
समस्या यह है कि सी ++ कंपाइलर संरचना को एक निश्चित आकार के रूप में देखता है, जबकि सी संकलन एक ही संरचना को थोड़ा अलग आकार के रूप में देखता है। यह बुरी बात है। मैं वास्तव में इस से परेशान हूं क्योंकि मुझे 4 बाइट विसंगति का कोई कारण नहीं मिल रहा है।
/usr/lib/gcc/i586-suse-linux/4.3/../../../../i586-suse-linux/bin/ld: Warning: size of symbol `tree' changed from 324 in /tmp/ccvx8fpJ.o to 328 in gpu.o
मेरे सी ++
#include <stdio.h>
#include <stdlib.h>
#include "assert.h"
extern "C"
{
#include "structInfo.h" //contains the structure declaration
}
...
तरह लग रहा है और मेरी सी फ़ाइलों की तरह
struct TB {
int nbranch, nnode, root, branches[NBRANCH][2];
double lnL;
} tree;
...
मेरे मेकअप फ़ाइल
तरह लग रहा है की तलाश में की तरह#include "structInfo.h"
...
structInfo.h साथ
देखो 012,
PRGS = prog
CC = cc
CFLAGS=-std=gnu99 -m32
CuCC = nvcc
CuFlags =-arch=sm_20
LIBS = -lm -L/usr/local/cuda-5.0/lib -lcuda -lcudart
all : $(PRGS)
prog:
$(CC) $(CFLAGS) prog.c gpu.o $(LIBS) -o prog
gpu.o:
$(CuCC) $(CuFlags) -c gpu.cu
कुछ लोगों ने मुझसे पूछा कि मैंने एक अलग मेजबान संकलन विकल्प का उपयोग क्यों नहीं किया। मुझे लगता है कि 2 रिलीज पहले से मेजबान संकलन विकल्प को हटा दिया गया है? it never appeared to do what it said it would do भी। एक 4-बाइट संरेखण और कम से कम 8-बाइट संरेखण के साथ दूसरे के साथ काम कर रहा है:
nvcc warning : option 'host-compilation' has been deprecated and is ignored
क्या पैडिंग में अंतर मौजूद हो सकता है? क्या आप वाकई एनवीसीसी और जीसीसी (जो मुझे लगता है कि आप सीसी के रूप में उपयोग कर रहे हैं) संगत हैं? संपादित करें: असल में, एनवीसीसी के साथ पैडिंग मुद्दों से संबंधित कुछ पढ़ना, –
द्वारा खड़े रहें क्या यह 32-बिट या 64-बिट प्लेटफार्म है? क्या आप कोशिश कर सकते हैं [पैरामीटर को चारों ओर ले जाना] (https://devtalk.nvidia.com/default/topic/394418/padding-problem-nvcc-bug-/) और देखें कि क्या यह काम करता है? –
@EsaLakaniemi यह एक 32 बिट मंच है। – Mikhail