基于SSE浮点向量的减少,我试图对无符号长数组求和,但是很不幸,没有成功。
uint64_t vsum_uint64 (uint64_t *a, int n)
{
uint64_t sum; // lets say sum fits
__m128 vsum = _mm_set1_ps(0);
for (int i = 0; i < n; i += 2) { // 2 unit64 in single __m128
__m128 v = _mm_loadl_epi64(&a[i]);
vsum = _mm_add_epi64(vsum, v);
}
_mm_store_ss(&sum, vsum);
uint64_t *p = &vsum;
sum+=*(p+1);
// vsum = _mm_hadd_ps(vsum, vsum);
// vsum = _mm_hadd_ps(vsum, vsum);
return sum;
}
Run Code Online (Sandbox Code Playgroud)
这应该是正确的,但是gcc仍然无法编译它。我搜索了答案,但没有找到答案。
这就是gcc所说的:
main.cpp: In function ‘uint64_t vsum_uint64(const uint64_t*, int)’:
main.cpp:73:35: …Run Code Online (Sandbox Code Playgroud) 我是那种一卡与自动机和语法问题.我搜索了很多但没有成功.
它甚至有可能构建一个语法生成这种语言L?
L = { a(2i) | i >= 0}
谁能为我提供简单的解决方案?
grammar context-free-grammar automaton exponential context-free-language
基于C++多态与可变参数函数参数我尝试编写类似的(非模板化,带构造函数)程序
码:
#include <thread>
#include <iostream>
#include <vector>
class Base
{
public:
Base (int count) { run(count); } // this-> does not help
virtual void run (int count) { // non-virtual does not help eighter
for (int i=0; i<count; ++i)
threads.emplace_back(std::ref(*this));
}
virtual ~Base () {
for (auto& t : threads)
t.join();
}
virtual void operator() () = 0;
protected:
std::vector< std::thread > threads;
};
class Derived : public Base
{
public:
using Base::Base;
virtual void operator() () …Run Code Online (Sandbox Code Playgroud) 我可以使用=它们的引用来测试两个对象的相等性吗?我的意思是引用的行为是否像C++ 指针(在比较方面)?
示例 - 我可以确保ll列表的每个对象都只打印一次吗?
val ll: List[MyObject] = // definition of list of my very complicated objects
for (x <- ll) {
for (y <- ll) {
if (x == y) println(x)
}
}
Run Code Online (Sandbox Code Playgroud)
我想上比较同一如果对象失败的引用是不同的(如果具有相同的对象上的不同的引用甚至有可能)。
如果将列表作为参数传递给某个方法,这种行为会改变吗?
谢谢澄清
我处理Scala问题,我无法正确命名,所以也许这里已经有答案(请耐心等待).
假设这段代码:
class A {def foo() = 5}
class B {def foo() = 6}
def fooer[T](x:T) = x.foo()
Run Code Online (Sandbox Code Playgroud)
我收到错误:
<console>:7: error: value foo is not a member of type parameter T
def fooer[T](x:T) = x.foo
Run Code Online (Sandbox Code Playgroud)
这完全有道理,因为编译器不可能知道T将传递什么类型.最后问题 - 如何实现类型化函数,因此只接受foo声明方法的类型?
请注意,我不寻求enum替代项(参见doc),因为我不知道有多少类(外部库).这些类也没有共同的前任类或特征,因此无法修改它们.
这甚至可能吗?C++语言使用模板支持此行为.我更喜欢不使用反射API的解决方案.
谢谢 :)
我尝试了一些定义,fooer如
def fooer[T <: {def foo(): Integer}](x:T) = x.foo()
fooer[A](new A)
<console>:10: error: type arguments [A] do not conform to method fooer's type parameter bounds [T <: AnyRef{def …Run Code Online (Sandbox Code Playgroud) 使用Java6反射API,Class.getDeclaredFields返回非常奇怪的值.类字段示例:
protected String[] arrF = new String[15];
Run Code Online (Sandbox Code Playgroud)
使用getDeclaredFields正确Class,Field返回a:
arrF[Ljava.lang.String;问题:[L前缀是否意味着它arrF是一个数组?我可以一直依赖它,即字段是一个数组iff类型的前缀[L?如果不是,我如何获得有关该字段"数组"的一些信息?
基本上,我需要包含一个结构VecDeque的State秒.我的代码到目前为止:
type State = [[bool]];
pub struct MyStruct {
queue: VecDeque<State>,
}
impl MyStruct {...}
Run Code Online (Sandbox Code Playgroud)
在编译这段代码时,我结束了
error: the trait `core::marker::Sized` is not implemented for the type `[[bool]]` [E0277]
note: `[[bool]]` does not have a constant size known at compile-time
Run Code Online (Sandbox Code Playgroud)
我想State在队列中根本不是好主意,所以我尝试了一个引用队列(这也适合我的应用程序).
type State = [[bool]];
pub struct MyStruct {
queue: VecDeque<&State>,
}
impl MyStruct {...}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,更奇怪的错误发生:
error: missing lifetime specifier [E0106]
Run Code Online (Sandbox Code Playgroud)
如何创建这样的结构,以便按照我上面的方式工作?我真的不是Rust专家.
c++ ×2
polymorphism ×2
scala ×2
arrays ×1
automaton ×1
c++11 ×1
comparison ×1
exponential ×1
grammar ×1
java ×1
lifetime ×1
pure-virtual ×1
reference ×1
reflection ×1
rust ×1
simd ×1
sse ×1
sum ×1
uint64 ×1