Hi again,
I am sorry about my lack of care. I have recompiled and tried all the code with the supported version 10.0.130. Here is my info:
[1][SYS INFO ]
OptiX Version:[6.0.0] Branch:[r418_00] Build Number:[25823979] CUDA Version:[cuda100] 64-bit
Display driver: 418.43
Devices available:
CUDA device: 0
0000:01:00.0
GeForce GTX 970
SM count: 13
SM arch: 52
SM clock: 1240 KHz
GPU memory: 4040 MB
TCC driver: 0
Compatible devices: 0
I use the sutil library provided by the SDK. The NVRTC options it uses (printed from sutil.cpp) are:
-I/home/eegea/optix6/SDK/multitransmitter
-I/home/eegea/optix6/include
-I/home/eegea/optix6/include/optixu
-I/home/eegea/optix6/SDK/support/mdl-sdk/include
-I/usr/local/cuda-10.0/include
-I/home/eegea/optix6/SDK/sutil
-I/home/eegea/optix6/SDK/cuda
-arch
compute_30
-use_fast_math
-lineinfo
-default-device
-rdc
true
-D__x86_64
Apparently the problem is in this line in the CU file I use for the program:
HitInfoMultiTransmitter internalHit;
where the HitInfoMultiTransmitter is a struct defined as:
struct HitInfoMultiTransmitter {
optix::uint4 whrd; // [written,refhash,rxBufferIndex,dist]
optix::float2 E; // Complex
optix::uint transmitterIndex;
__device__ HitInfoMultiTransmitter() : whrd(make_uint4(0u,0u,0u,0u)),E(make_float2(0.0f,0.0f)),transmitterIndex(0)
{
}
//Equality operator: hits are equal if the combined has is equal, that is, the have hit the same sequence of faces
__device__ bool operator==(const HitInfoMultiTransmitter &h) const {
return (whrd.y == h.whrd.y);
};
//Sorting. Here we first order by txId (tx buffer index), then check receiver id (receiver buffer index), then hash and finally distance. Hits are ordered by txId, rxid, combined_hash and distance to receiver
__device__ virtual bool operator<(const HitInfoMultiTransmitter &h) const {
if (transmitterIndex==h.transmitterIndex){
if (whrd.z == h.whrd.z) {
if (whrd.y == h.whrd.y) {
return (whrd.w < h.whrd.w);
} else {
return (whrd.y < h.whrd.y);
}
} else {
return (whrd.z < h.whrd.z);
}
} else {
return (transmitterIndex<h.transmitterIndex);
}
};
};
If I comment out the line where this struct is used the program is compiled and the launch proceeds, otherwise, it does not allow me to generate it.
I have tried different ways to initialize the struct but none seems to work.
I need that struct because I use thrust to process on device some results.
A previous program very similar but that uses this slightly different struct works correctly without any problem:
struct HitInfo {
//Packed to fullfill alignment rules, see for instance https://devtalk.nvidia.com/default/topic/1037798/optix/optix-time-for-launch/
optix::uint4 whrd; // [written,refhash,rxBufferIndex,dist]
optix::float2 E; // Complex
//Equality operator: hits are equal if the combined has is equal, that is, the have hit the same sequence of faces
__host__ __device__ bool operator==(const HitInfo &h) const {
return (whrd.y == h.whrd.y);
};
//Sorting. First check id (buffer index), then hash and finally distance. Hits are ordered by id, combined_hash and distance to receiver
__host__ __device__ bool operator<(const HitInfo &h) const {
if (whrd.z == h.whrd.z) {
if (whrd.y == h.whrd.y) {
return (whrd.w < h.whrd.w);
} else {
return (whrd.y < h.whrd.y);
}
} else {
return (whrd.z < h.whrd.z);
}
};
}
Thank you very much for your help